public class Solution {
    public static void main(String[] args) {
        Solution s = new Solution();
        System.out.println(s.CheckPermutation("abc", "caa"));
    }

    public boolean CheckPermutation(String s1, String s2) {
        /**
         * 判定是否互为字符重排
         * 判定逻辑：
         *  只要每个字符个数均一致，则认为是字符重拍
         * 解题思路：
         *  1，准备int[26]数据结构作为哈希表，arr[i]表示i字符出现个数
         *  2，枚举s1则++，枚举s2则--，最后观察数组中元素和是否全部为0即可
         * 问题：
         *  s1和s2的长度可能不一致，不一致则必定不同*/
        // 1 预处理
        // -边界情况处理
        if(s1.length() != s2.length()) {
            return false;
        }
        int n = s1.length();
        int[] arr = new int[26];

        // 2 计数
        for(int i = 0; i < n; i++) {
            arr[s1.charAt(i)-'a']++;
            arr[s2.charAt(i)-'a']--;
        }

        // 3 返回值
        for(int e: arr) {
            if(e != 0) {
                return false;
            }
        }
        return true;
    }
}
